package com.mhxy.service.impl;

import com.mhxy.constant.PicConstants;
import com.mhxy.enums.Coord;
import com.mhxy.service.AbstractTask;
import com.mhxy.util.FuzzyPicUtil;
import com.mhxy.util.MouseUtil;
import com.mhxy.util.ThreadUtil;
import com.sun.jna.platform.win32.WinDef;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;

/**
 * 普通副本任务
 */
@Slf4j
public class InstanceNormalTaskImpl extends AbstractTask {

    private final int number;

    // 滔海去
    private final List<String> CONFIRM_BATTLE_PICS_TXQ = Arrays.asList(
            PicConstants.普通副本_滔海去_确认战斗1,
            PicConstants.普通副本_滔海去_确认战斗2,
            PicConstants.普通副本_滔海去_确认战斗3
    );
    // 明珠还
    private final List<String> CONFIRM_BATTLE_PICS_MZH = Arrays.asList(
            PicConstants.普通副本_明珠还_确认战斗1,
            PicConstants.普通副本_明珠还_确认战斗2,
            PicConstants.普通副本_明珠还_确认战斗3
    );
    // 二重影
    private final List<String> CONFIRM_BATTLE_PICS_ECY = Arrays.asList(
            PicConstants.普通副本_二重影_确认战斗1,
            PicConstants.普通副本_二重影_确认战斗2,
            PicConstants.普通副本_二重影_确认战斗3
    );
    // 金禅心
    private final List<String> CONFIRM_BATTLE_PICS_JCX = Arrays.asList(
            PicConstants.普通副本_金禅心_确认战斗1,
            PicConstants.普通副本_金禅心_确认战斗2,
            PicConstants.普通副本_金禅心_确认战斗3
    );
    // 绿烟如梦
    private final List<String> CONFIRM_BATTLE_PICS_LYRM = Arrays.asList(
            PicConstants.普通副本_绿烟如梦_确认战斗1,
            PicConstants.普通副本_绿烟如梦_确认战斗2,
            PicConstants.普通副本_绿烟如梦_确认战斗3
    );
    // 万丈山
    private final List<String> CONFIRM_BATTLE_PICS_WZS = Arrays.asList(
            PicConstants.普通副本_万丈山_确认战斗1,
            PicConstants.普通副本_万丈山_确认战斗2,
            PicConstants.普通副本_万丈山_确认战斗3
    );
    // 桃花定情
    private final List<String> CONFIRM_BATTLE_PICS_THDQ = Arrays.asList(
            PicConstants.普通副本_桃花定情_确认战斗1,
            PicConstants.普通副本_桃花定情_确认战斗2,
            PicConstants.普通副本_桃花定情_确认战斗3,
            PicConstants.普通副本_桃花定情_确认战斗4
    );
    // 踏西行
    private final List<String> CONFIRM_BATTLE_PICS_TXX = Arrays.asList(
            PicConstants.普通副本_踏西行_确认战斗1,
            PicConstants.普通副本_踏西行_确认战斗2,
            PicConstants.普通副本_踏西行_确认战斗3
    );



    public InstanceNormalTaskImpl(WinDef.HWND hwnd_0, int number) {
        super(hwnd_0);
        this.number = number;
    }

    @Override
    public String getTaskName() throws Exception {
        return "普通副本" + number;
    }

    @Override
    public Boolean before() throws Exception {
        clickEsc1();
        return goToChangAn();
    }

    @Override
    public Boolean execute() throws Exception {
        // 打开长安小地图
        MouseUtil.lClickRandom(hwnd_0, Coord.CURRENT_MAP_XY.getX(),  Coord.CURRENT_MAP_XY.getY());
        ThreadUtil.sleep1();
        MouseUtil.lClickRandom(hwnd_0, Coord.BAI_XIAO_XIAN_ZI_XY.getX(),  Coord.BAI_XIAO_XIAN_ZI_XY.getY());


        // 判断是否要点击”放大镜“
//        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_任务图标_1s, 2).isFinded()) {
//            // 点击”放大镜“
//            if (!FuzzyPicUtil.findAndClickRandom(hwnd_0, PicConstants.普通副本_任务图标_1, 2)) {
//                return false;
//            }
//        }
//        ThreadUtil.sleep1();

//        for (int i = 0; i < 20; i++) {
//            if (FuzzyPicUtil.findAndClickRandom(hwnd_0, PicConstants.普通副本_任务图标_2, 1,0.8)) {
//                break;
//            }
//            // 如果没找到下拉滑动屏幕寻找图标
//            MouseUtil.dragMove(hwnd_0, Coord.INSTANCE_SELECT.getX(), Coord.INSTANCE_SELECT.getY(), 0, -80);
//            ThreadUtil.sleep1();
//        }

        ThreadUtil.sleep(5000);

        // 查找并点击“选择副本”按钮
        if (!FuzzyPicUtil.findAndClickRandom(hwnd_0, PicConstants.普通副本_选择副本按钮, 5)) {
            log.error("【{}】查找并点击“选择副本”按钮失败！", getTaskName());
            return false;
        }
        ThreadUtil.sleep1();

        // 选择点击“进入”按钮
        if (number == 1) {
            MouseUtil.lClickRandom(hwnd_0, Coord.DUNGEON_NORMAL_JR1_DXY.getX(),  Coord.DUNGEON_NORMAL_JR1_DXY.getY());
        } else if (number == 2) {
            MouseUtil.lClickRandom(hwnd_0, Coord.DUNGEON_NORMAL_JR2_DXY.getX(), Coord.DUNGEON_NORMAL_JR2_DXY.getY());
        } else {
            MouseUtil.lClickRandom(hwnd_0, Coord.DUNGEON_NORMAL_JR3_DXY.getX(), Coord.DUNGEON_NORMAL_JR3_DXY.getY());
        }
        return true;
    }

    @Override
    public Boolean after() throws Exception {
        ThreadUtil.sleep3();
        return runInstance();
    }

    private boolean switchInstance() throws Exception {
        // 滔海去 50级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_滔海去_判断副本, 3).isFinded()) {
            log.info("进入“滔海去”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_TXQ);
        }
        // 金禅心 50级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_金禅心_判断副本, 3).isFinded()) {
            log.info("进入“金禅心”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_JCX);
        }
        // 明珠还 50级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_明珠还_判断副本, 3).isFinded()) {
            log.info("进入“明珠还”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_MZH);
        }
        // 二重影 50级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_二重影_判断副本, 3).isFinded()) {
            log.info("进入“二重影”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_ECY);
        }
        // 绿烟如梦 50级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_绿烟如梦_判断副本, 3).isFinded()) {
            log.info("进入“绿烟如梦”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_LYRM);
        }
        // 万丈山 70级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_万丈山_判断副本, 3).isFinded()) {
            log.info("进入“万丈山”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_WZS);
        }
        // 桃花定情 70级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_桃花定情_判断副本, 3).isFinded()) {
            log.info("进入“桃花定情”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_THDQ);
        }
        // 踏西行 70级
        if (FuzzyPicUtil.findPic(hwnd_0, PicConstants.普通副本_踏西行_判断副本, 3).isFinded()) {
            log.info("进入“踏西行”副本...");
            return runInstance(CONFIRM_BATTLE_PICS_TXX);
        }
        return false;
    }

}
